{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "name:曾露莎"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "metadata": {},
   "outputs": [],
   "source": [
    "#保存数据\n",
    "#import cPickle\n",
    "\n",
    "import itertools\n",
    "\n",
    "#处理事件字符串\n",
    "import datetime\n",
    "\n",
    "import numpy as np\n",
    "import scipy.io as sio\n",
    "import scipy.sparse as ss\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn import metrics\n",
    "\n",
    "#相似度/距离\n",
    "import scipy.spatial.distance as ssd\n",
    "from sklearn.cluster import MiniBatchKMeans\n",
    "\n",
    "from collections import defaultdict\n",
    "from sklearn.preprocessing import normalize\n",
    "import pandas as pd\n",
    "\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "number of uniqueUsers :3391\n",
      "number of uniqueEvents :13418\n"
     ]
    }
   ],
   "source": [
    "# 统计训练集中有多少不同的用户的events\n",
    "uniqueUsers = set()\n",
    "uniqueEvents = set()\n",
    "\n",
    "#倒排表\n",
    "#统计每个用户参加的活动   / 每个活动参加的用户\n",
    "eventsForUser = defaultdict(set)\n",
    "usersForEvent = defaultdict(set)\n",
    "    \n",
    "for filename in [\"train.csv\", \"test.csv\"]:\n",
    "    f = open(filename, 'r')\n",
    "    \n",
    "    #忽略第一行（列名字）\n",
    "    f.readline().strip().split(\",\")\n",
    "    \n",
    "    for line in f:    #对每条记录\n",
    "        cols = line.strip().split(\",\")\n",
    "        uniqueUsers.add(cols[0])   #第一列为用户ID\n",
    "        uniqueEvents.add(cols[1])   #第二列为活动ID add() 方法用于给集合添加元素，如果添加的元素在集合中已存在，则不执行任何操作\n",
    "        \n",
    "\n",
    "    f.close()\n",
    "\n",
    "\n",
    "n_uniqueUsers = len(uniqueUsers)\n",
    "n_uniqueEvents = len(uniqueEvents)\n",
    "\n",
    "print(\"number of uniqueUsers :%d\" % n_uniqueUsers)\n",
    "print(\"number of uniqueEvents :%d\" % n_uniqueEvents)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 246,
   "metadata": {},
   "outputs": [],
   "source": [
    "result=[]\n",
    "f = open(\"events.csv\", 'r')\n",
    "    \n",
    "#忽略第一行（列名字）\n",
    "#lines=f.readline().strip().split(\",\")\n",
    "lines=f.readlines()\n",
    "col_name=lines[0].strip().split(\",\")\n",
    "col_name_select=col_name[9:110]\n",
    "for line in lines:    #对每条记录\n",
    "    cols = line.strip().split(\",\")\n",
    "    if cols[0] in uniqueEvents:\n",
    "        result.append(cols[9:110])\n",
    "    #m = re.findall(r\"uniqueEvents\", cols[0])\n",
    "    #if m:\n",
    "        #result.append(line)       \n",
    "f.close()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 250,
   "metadata": {},
   "outputs": [],
   "source": [
    "select_events = pd.DataFrame(result, columns=col_name_select,dtype=np.int) \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>c_1</th>\n",
       "      <th>c_2</th>\n",
       "      <th>c_3</th>\n",
       "      <th>c_4</th>\n",
       "      <th>c_5</th>\n",
       "      <th>c_6</th>\n",
       "      <th>c_7</th>\n",
       "      <th>c_8</th>\n",
       "      <th>c_9</th>\n",
       "      <th>c_10</th>\n",
       "      <th>...</th>\n",
       "      <th>c_92</th>\n",
       "      <th>c_93</th>\n",
       "      <th>c_94</th>\n",
       "      <th>c_95</th>\n",
       "      <th>c_96</th>\n",
       "      <th>c_97</th>\n",
       "      <th>c_98</th>\n",
       "      <th>c_99</th>\n",
       "      <th>c_100</th>\n",
       "      <th>c_other</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 101 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   c_1  c_2  c_3  c_4  c_5  c_6  c_7  c_8  c_9  c_10   ...     c_92  c_93  \\\n",
       "0    2    0    2    0    0    0    0    0    0     0   ...        0     1   \n",
       "1    2    0    2    0    0    0    0    0    0     0   ...        0     0   \n",
       "2    0    0    0    0    0    0    0    0    0     0   ...        0     0   \n",
       "3    1    0    2    1    0    0    0    0    0     0   ...        0     0   \n",
       "4    1    1    0    0    0    0    0    2    0     0   ...        0     0   \n",
       "\n",
       "   c_94  c_95  c_96  c_97  c_98  c_99  c_100  c_other  \n",
       "0     0     0     0     0     0     0      0        9  \n",
       "1     0     0     0     0     0     0      0        7  \n",
       "2     0     0     0     0     0     0      0       12  \n",
       "3     0     0     0     0     0     0      0        8  \n",
       "4     0     0     0     0     0     0      0        9  \n",
       "\n",
       "[5 rows x 101 columns]"
      ]
     },
     "execution_count": 251,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "select_events.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 252,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 13418 entries, 0 to 13417\n",
      "Columns: 101 entries, c_1 to c_other\n",
      "dtypes: int64(101)\n",
      "memory usage: 10.3 MB\n"
     ]
    }
   ],
   "source": [
    "select_events.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 253,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 253,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "select_events.isnull().any().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(13418, 98)\n"
     ]
    }
   ],
   "source": [
    "#pca降维\n",
    "pca=PCA(n_components='mle')\n",
    "pca.fit(select_events)\n",
    "\n",
    "select_events_pca = pca.transform(select_events)\n",
    "\n",
    "# 降维后的特征维数\n",
    "print(select_events_pca.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从101维降到98维，这也太少了。。。，那就不使用降维的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/preprocessing/data.py:323: DataConversionWarning: Data with input dtype int64 were all converted to float64 by MinMaxScaler.\n",
      "  return self.partial_fit(X, y)\n"
     ]
    }
   ],
   "source": [
    "#归一，0值很多，所以做成[0,1]\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "mm_x = MinMaxScaler()\n",
    "select_events=mm_x.fit_transform(select_events)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 256,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 一个参数点（聚类数据为K）的模型，在校验集上评价聚类算法性能\n",
    "def K_cluster_analysis(K, X_train):\n",
    "    #start = time.time()\n",
    "    \n",
    "    print(\"K-means begin with clusters: {}\".format(K));\n",
    "    \n",
    "    #K-means,在训练集上训练\n",
    "    mb_kmeans = MiniBatchKMeans(n_clusters = K)\n",
    "    #mb_kmeans.fit(X_train)\n",
    "    \n",
    "    # 在训练集和测试集上测试\n",
    "    y_train_pred = mb_kmeans.fit_predict(X_train)\n",
    "    #y_val_pred = mb_kmeans.predict(X_val)\n",
    "    \n",
    "    #以前两维特征打印训练数据的分类结果\n",
    "    #plt.scatter(X_train[:, 0], X_train[:, 1], c=y_pred)\n",
    "    #plt.show()\n",
    "\n",
    "    # K值的评估标准\n",
    "    #常见的方法有轮廓系数Silhouette Coefficient和Calinski-Harabasz Index\n",
    "    #这两个分数值越大则聚类效果越好\n",
    "    CH_score_1 = metrics.calinski_harabaz_score(X_train,y_train_pred)\n",
    "    #CH_score_2 = metrics.silhouette_score(X_train,y_train_pred)\n",
    "    \n",
    "\n",
    "    \n",
    "    #end = time.time()\n",
    "    print(\"CH_score_1: {}\".format(CH_score_1))\n",
    "    #print(\"CH_score_2: {}\".format(CH_score_2))\n",
    "    \n",
    "    return CH_score_1 #CH_score_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 257,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K-means begin with clusters: 10\n",
      "CH_score_1: 392.75454516833076\n",
      "K-means begin with clusters: 20\n",
      "CH_score_1: 227.48459163355986\n",
      "K-means begin with clusters: 30\n",
      "CH_score_1: 159.1892004023127\n",
      "K-means begin with clusters: 40\n",
      "CH_score_1: 156.91732837650332\n",
      "K-means begin with clusters: 50\n",
      "CH_score_1: 106.26779816419133\n",
      "K-means begin with clusters: 60\n",
      "CH_score_1: 97.94375006130777\n",
      "K-means begin with clusters: 70\n",
      "CH_score_1: 102.8790114662803\n",
      "K-means begin with clusters: 80\n",
      "CH_score_1: 87.45253278908993\n",
      "K-means begin with clusters: 90\n",
      "CH_score_1: 86.74675286059498\n",
      "K-means begin with clusters: 100\n",
      "CH_score_1: 71.51299305269143\n"
     ]
    }
   ],
   "source": [
    "# 设置超参数（聚类数目K）搜索范围\n",
    "Ks =[10,20,30,40,50,60,70,80,90,100]\n",
    "CH_scores_1 = []\n",
    "#CH_scores_2 = []\n",
    "for K in Ks:\n",
    "    ch1 = K_cluster_analysis(K, select_events)\n",
    "    CH_scores_1.append(ch1)\n",
    "    #CH_scores_2.append(ch2)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "聚成10类的分数比较高，就选择10类作为最后聚类数\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 258,
   "metadata": {},
   "outputs": [],
   "source": [
    "#显示聚类结果\n",
    "#画出聚类结果，每一类用一种颜色\n",
    "\n",
    "\n",
    "n_clusters = 10\n",
    "mb_kmeans = MiniBatchKMeans(n_clusters = n_clusters)\n",
    "mb_kmeans.fit(select_events)\n",
    "\n",
    "y_train_pred = mb_kmeans.labels_\n",
    "\n",
    "\n",
    "\n",
    "cents = mb_kmeans.cluster_centers_#质心\n",
    "\n",
    "#select_events=mm_x.inverse_transform(select_events)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "colors = ['b','g','r','k','c','m','y','#e24fff','#524C90','#845868']\n",
    "for i in range(n_clusters):\n",
    "    index = np.nonzero(y_train_pred==i)[0] \n",
    "    x1 = select_events[index,0]\n",
    "    x2 = select_events[index,1]\n",
    "    y_i = y_train_pred[index]\n",
    "    for j in range(len(x1)):\n",
    "        if j < 50:  #每类打印50个\n",
    "            plt.text(x1[j],x2[j],str(int(y_i[j])),color=colors[i],\\\n",
    "                fontdict={'weight': 'bold', 'size': 9})\n",
    "    #plt.scatter(cents[i,0],cents[i,1],marker='x',color=colors[i],linewidths=12)\n",
    "\n",
    "plt.axis([0,0.01,-0.05,0.20])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "看不出分得怎么样\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 260,
   "metadata": {},
   "outputs": [],
   "source": [
    "#用降维后的数据做下\n",
    "\n",
    "#归一，0值很多，所以做成[0,1]\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "mm_x_pca = MinMaxScaler()\n",
    "select_events_pca=mm_x_pca.fit_transform(select_events_pca)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 261,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K-means begin with clusters: 10\n",
      "CH_score_1: 75.46643555242304\n",
      "K-means begin with clusters: 20\n",
      "CH_score_1: 42.537871268682075\n",
      "K-means begin with clusters: 30\n",
      "CH_score_1: 58.535279063750245\n",
      "K-means begin with clusters: 40\n",
      "CH_score_1: 37.856047506469714\n",
      "K-means begin with clusters: 50\n",
      "CH_score_1: 58.710747374850165\n",
      "K-means begin with clusters: 60\n",
      "CH_score_1: 34.26075045122511\n",
      "K-means begin with clusters: 70\n",
      "CH_score_1: 31.225157125969815\n",
      "K-means begin with clusters: 80\n",
      "CH_score_1: 30.174729015965212\n",
      "K-means begin with clusters: 90\n",
      "CH_score_1: 36.097499561802664\n",
      "K-means begin with clusters: 100\n",
      "CH_score_1: 31.792640169204745\n"
     ]
    }
   ],
   "source": [
    "# 设置超参数（聚类数目K）搜索范围\n",
    "Ks_pca =[10,20,30,40,50,60,70,80,90,100]\n",
    "CH_scores_1_pca = []\n",
    "#CH_scores_2 = []\n",
    "for K in Ks_pca:\n",
    "    ch1 = K_cluster_analysis(K, select_events_pca)\n",
    "    CH_scores_1_pca.append(ch1)\n",
    "    #CH_scores_2.append(ch2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 262,
   "metadata": {},
   "outputs": [],
   "source": [
    "#显示聚类结果\n",
    "#画出聚类结果，每一类用一种颜色\n",
    "\n",
    "\n",
    "n_clusters = 10\n",
    "mb_kmeans_pca = MiniBatchKMeans(n_clusters = n_clusters)\n",
    "mb_kmeans_pca.fit(select_events_pca)\n",
    "\n",
    "y_train_pred_pca = mb_kmeans_pca.labels_\n",
    "\n",
    "\n",
    "\n",
    "cents_pca = mb_kmeans_pca.cluster_centers_#质心\n",
    "\n",
    "#select_events=mm_x.inverse_transform(select_events)\n",
    "\n",
    "                   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 275,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "colors = ['b','g','r','k','c','m','y','#e24fff','#524C90','#845868']\n",
    "for i in range(n_clusters):\n",
    "    index = np.nonzero(y_train_pred_pca==i)[0] \n",
    "    x1_pca = select_events_pca[index,0]\n",
    "    x2_pca = select_events_pca[index,1]\n",
    "    y_i_pca = y_train_pred_pca[index]\n",
    "    for j in range(len(x1_pca)):\n",
    "        if j < 50:  #每类打印50个\n",
    "            plt.text(x1_pca[j],x2_pca[j],str(int(y_i_pca[j])),color=colors[i],\\\n",
    "                fontdict={'weight': 'bold', 'size': 9})\n",
    "    #plt.scatter(cents[i,0],cents[i,1],marker='x',color=colors[i],linewidths=12)\n",
    "\n",
    "plt.axis([0,0.03,0.25,0.32])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7rc1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
